PHP 7.0 on CentOS 7.4
Posted on Tue 03 October 2017 in CentOS
Using PHP 7.0 on CentOS 7.4
This article is about I concern I had recently :
How to use PHP 7.0 or 7.1 on CentOS 7 on the default httpd server without having to use external repositories or recompile PHP from source?
The answer lies in the Software Collections. Here we will start from a fresh CentOS installation, and move forward into having a website running PHP 7.0.
First of all, we will install the Software Collection's repository (it's an official repo that needs to be enabled).
root @ centos7-vm: ~ # yum -y install centos-release-scl.noarch
This command will deploy a new repository on your system, which is part of the official repositories of CentOS.
Once this is installed, let's install the PHP 7 package as well as the httpd packages, along with the addons.
root @ centos7-vm: ~ 24 # yum -y install rh-php70 rh-php70-php rh-php70-php-fpm httpd
In order to use php 7.0, we will be using php-fpm, which is the recommended way, in place of mod_php. To do this, we will use the fpm service.
This service will run by default on port 9000. If you need to change that port, head to the file :
/etc/opt/rh/rh-php70/php-fpm.d/www.conf
And change the line :
listen = 127.0.0.1:9000
to the one you want to setup (e.g 9002). Once this is done, we need to change the selinux database to add 9002 to a valid port to run for httpd services :
semanage port -a -t http_port_t -p tcp 9002
Once this is done, start the php-fpm service and enable it at boot :
root @ centos7-vm: ~ 29 # systemctl enable rh-php70-php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/rh-php70-php-fpm.service to /usr/lib/systemd/system/rh-php70-php-fpm.service.
root @ centos7-vm: ~ 30 # systemctl start rh-php70-php-fpm.service
root @ centos7-vm: ~ 31 # systemctl status rh-php70-php-fpm.service
● rh-php70-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-10-24 13:35:11 CEST; 2s ago
Main PID: 30045 (php-fpm)
Status: "Ready to handle connections"
CGroup: /system.slice/rh-php70-php-fpm.service
├─30045 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf)
├─30046 php-fpm: pool www
├─30047 php-fpm: pool www
├─30048 php-fpm: pool www
├─30049 php-fpm: pool www
└─30050 php-fpm: pool www
Now, we need to configure our httpd daemon to tell it to use this service to process php pages.
Let's create a file named fpm.conf
in our /etc/httpd/conf.d/
folder and give it the following content :
# PHP scripts setup
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/var/www/html
Alias / /var/www/html/
When doing this, apache will send all files that end with .php to our php-fpm service and display the result.
To confirm it's working, we can create a small page with a phpinfo request in /var/www/html
root @ centos7-vm: ~ 1 # cat /var/www/html/index.php
<?php phpinfo() ?>
root @ centos7-vm: ~ 1 #
Don't forget to also start, enable and add your httpd service to your firewall :
root @ centos7-vm: ~ 43 # systemctl enable httpd ; systemctl start httpd
root @ centos7-vm: ~ 46 # firewall-cmd --add-service=http --permanent
success
root @ centos7-vm: ~ 47 # firewall-cmd --reload
success
Now if we connect to the website, it will display the php correctly handled :